# -*-  conding: utf-8 -*-
# Author: czh
# Datetime : 2022/5/13 16:47

import re
import time
from bs4 import BeautifulSoup
import requests as rs
import traceback as tb


# 1、抓取函数
def getContent(url):
    try:
        r = rs.get(url)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        return r.text
    except:
        print('爬取失败')


def producer(stock_url, info_list):
    html = getContent(stock_url)  # 获取股票列表页面
    soup = BeautifulSoup(html, 'html.parser')
    a = soup.find_all('a')  # 找到所有a标签全部存放到列表当中，此时a已经变成了一个列表
    for i in a:
        try:
            href = i.attrs['href']  # 寻找到所有href属性的内容
            info_list.append(re.findall(r"[s][hz]\d{6}", href)[0])  # 利用正则表达式寻找符合内容的条件，因为输出的是一个列表所以用[0]可以将外面的框消除
        except:
            continue  # 因为在找的过程中会出现各种错误，所以用try continue来保证程序继续运行


def Save(info_list, stock_url, fpath):
    for i in info_list:  # 遍历各个股票的代码 一个一个打开网站
        url = stock_url + i + '.html'  # 生成每支股票的url
        html = getContent(url)  # 获取页面
        try:
            if html == '':
                continue
            soup = BeautifulSoup(html, 'html.parser')
            info_dict = {}  # 创建一个字典用来存放信息
            a_list = soup.find('div', attrs={'class': 'stock-bets'})  # 找到div标签下的属性为class 到stock-bets的内容
            name = a_list.find_all(attrs={'class': 'bets-name'})[0]  # 找出名字
            info_dict.update({'股票名称', name.text.split()[0]})  # 以字典的形式存放到字典当中
            key_list = a_list.find_all('dv')  # dv标签下对应的是这只股票所有键的名称，生成该列表
            value_list = a_list.find_all('dd')  # 所有值的名称生成列表
            for ee in range(len(key_list)):
                key = key_list[i].text
                value = value_list[i].text
                info_dict[key] = value
            with open(fpath, 'w', encoding='utf-8') as f:
                f.write(str(info_dict) + '\n')
        except:
            tb.print_exc()  # 打印错误的原因
            continue


if __name__ == '__main__':
    print(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()))
    stock_list_url =  'http://quote.eastmoney.com/stock_list.html'
    stock_url = 'https://gupiao.baidu.com/stock/'
    list = []
    fpath = "../jiucai/"
    producer(stock_list_url, list)
    Save(list, stock_url, fpath)
    print(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()))
